home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / ms_dos / grass / src / sub.asm < prev    next >
Encoding:
Assembly Source File  |  1993-07-08  |  1.8 KB  |  156 lines

  1.  
  2. ;
  3. ;    for    LSI-C
  4. ;
  5. ;        五味補助ライブラリ1
  6. ;
  7.  
  8. IDEAL
  9. P8086
  10.  
  11. CR    EQU    0DH,0AH
  12. NULL    EQU    00H
  13.  
  14.  
  15.     PUBLIC    printa_
  16.     PUBLIC    randomize_
  17.     PUBLIC    random_
  18.     PUBLIC    getnum_
  19.  
  20.  
  21. GROUP    CGROUP    TEXT
  22.  
  23. SEGMENT        TEXT    PUBLIC    "CODE"
  24.  
  25.     ASSUME    CS:TEXT,DS:TEXT,ES:TEXT
  26.  
  27. ;****************************************
  28. ;    int printa(char *)    
  29. ;****************************************
  30.  
  31. PROC    printa_
  32.  
  33.     PUSH    DI
  34.     XOR    BX,BX
  35.     MOV    DI,AX
  36. @@_1:
  37.     CMP    [BYTE DI+BX],NULL
  38.     JE    @@_2
  39.     MOV    AL,[BYTE DI+BX]
  40.     INT    29H
  41.     INC    BX
  42.     JMP    @@_1
  43. @@_2:
  44.     MOV    AX,BX
  45.     POP    DI
  46.     RET
  47.  
  48. ENDP
  49.  
  50. ;****************************************
  51. ;    void randomize(void)
  52. ;****************************************
  53.  
  54. PROC    randomize_
  55.  
  56.     PUSH    CX
  57.     PUSH    DX
  58.     MOV    AH,2CH
  59.     INT    21H
  60.     MOV    CH,DH
  61.     MOV    [WORD CS:BN],CX
  62.     POP    DX
  63.     POP    CX
  64.  
  65.     RET
  66.  
  67. ENDP
  68.  
  69.  
  70. ;****************************************
  71. ;    int random(int)
  72. ;****************************************
  73.  
  74. PROC    random_
  75.  
  76.     PUSH    DX
  77.     PUSH    CX
  78.     MOV    BX,AX
  79.     XOR    AX,AX
  80.     MOV    AX,[WORD CS:BN]
  81.     ADD    AX,5353            ;自分の名前
  82.     MOV    CL,2
  83.     ROL    AL,CL
  84.     MOV    CL,3
  85.     ROL    AH,CL
  86.     XCHG    AL,AH
  87.     ROL    AX,CL
  88.     MOV    [WORD CS:BN],AX
  89.  
  90.     MUL    BX
  91.     MOV    AX,DX
  92.  
  93.     POP    CX
  94.     POP    DX
  95.     RET
  96.  
  97. BN:
  98.     DW    12345
  99.  
  100. ENDP
  101.  
  102.  
  103. ;****************************************
  104. ;    int getnum(void)
  105. ;****************************************
  106.  
  107. proc    getnum_
  108.  
  109.     push    dx
  110.     push    ds
  111.     push    bp
  112.  
  113.     mov    bx,cs
  114.     mov    ds,bx
  115.     mov    ah,0ah
  116.     mov    dx,offset GETBUF
  117.     int    21h
  118.  
  119.     XOR    AX,AX
  120.     XOR    DX,DX
  121.     XOR    BP,BP
  122. DDDGET:
  123.     CMP    [BYTE DS:GETBUF+2+BP],0DH
  124.     JE    GET16BIT_END
  125.  
  126.     MOV    BX,10
  127.     MUL    BX        ;桁上げ
  128.     CMP    DX,00H
  129.     JNE    ERR_END        ;もし16ビットをオーバーすればエラー
  130.  
  131.     MOV    BL,[BYTE DS:GETBUF+2+BP]
  132.     SUB    BL,30H        ;コード差引
  133.     CMP    BL,9
  134.     JA    ERR_END
  135.     ADD    AX,BX
  136.     INC    BP
  137.  
  138.     JMP    DDDGET
  139.  
  140. ERR_END:
  141.     XOR    AX,AX
  142. GET16BIT_END:
  143.     POP    BP
  144.     POP    DS
  145.     POP    DX
  146.     RET
  147.  
  148. GETBUF:
  149.     db    10,?,10 dup(?)
  150.  
  151. ENDP
  152.  
  153.  
  154. ENDS
  155. END
  156.